package org.example.twopointer;

/**
 * 给定一个长度为 n 的整数数组 height 。有 n 条垂线，第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
 *
 * 找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
 *
 * 返回容器可以储存的最大水量。
 * 输入：[1,8,6,2,5,4,8,3,7]
 * 输出：49
 * 解释：图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下，容器能够容纳水（表示为蓝色部分）的最大值为 49。
 */
public class MaxArea {
    public int maxArea(int[] height) {
        int left = 0,right=height.length-1;
        int ret = 0;
        while(left < right){
            int sum = (right - left) * Math.min(height[left],height[right]);
            ret =Math.max(ret,sum);
            //排除矮的柱子，因为矮柱子跟另一侧的柱子组成的情况的最大值已经找到，因为如果固定
            //矮柱子，另一侧宽度会减小，但是高度不会增加，无需讨论矮柱子和另一侧组合的情况
            //固定高柱子，虽然宽度减小，但是可能会比这次高度高，因为水面取决高的一个柱子
            if(height[left]<height[right]){
                left++;
            } else{
                right--;
            }
        }
        return ret;
    }
}
